package org.example.springboot.utils;

import java.lang.reflect.Field;
import java.util.*;

public class NonNullPropertiesUtil {

    /**
     * 返回指定对象中所有非空的属性及其值。
     *
     * @param obj 要检查的对象
     * @return 包含非空属性及其值的Map
     * @author Fz
     */
    public static Map<String, Object> getNonNullProperties(Object obj) {
        Map<String, Object> nonNullProperties = new HashMap<>();

        // 检查对象是否为空
        if (obj == null) {
            return nonNullProperties;
        }

        // 获取对象的类
        Class<?> clazz = obj.getClass();
        List<Field> allFields = new ArrayList<>();

        // 收集当前类和所有父类的字段
        Class<?> currentClass = clazz;
        while (currentClass != null && !currentClass.equals(Object.class)) {
            Collections.addAll(allFields, currentClass.getDeclaredFields());
            currentClass = currentClass.getSuperclass();
        }

        // 遍历所有字段
        for (Field field : allFields) {
            field.setAccessible(true);
            try {
                Object value = field.get(obj);
                if (value != null) {
                    nonNullProperties.put(field.getName(), value); // 将非空字段及其值放入Map
                }
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }

        return nonNullProperties;
    }

}
